/*
 * Agent.cpp
 *
 *  Created on: Feb 23, 2012
 *      Author: pleun
 */

#include "Agent.h"
#include <iostream>
#include "Conc_Opdr1.h"

void Agent::run() {
	int aantaldoorgelatenAutos = 0;

	//Zolang als......
	while (true) {
		//Pakt het kruispunt om autos af te handelen.
		kruising.lock();

		//De agent geeft voor 5 autos uit dezelfde richting een signal om door te rijden.
		if (aantalAutos[kijkrichting] > 0 && aantaldoorgelatenAutos < 5) {

			autosUitRichting[kijkrichting].signal();
			//Wacht tot de auto overgestoken is (agent.signal -->auto.cpp)
			agent.wait(kruising);
			//Er is een sein ontvangen van een auto die overgestoken is.
			aantalAutos[kijkrichting]--;
			aantaldoorgelatenAutos++;


		} else if (aantalAutos[0] == 0 && aantalAutos[1] == 0 && aantalAutos[2]
				== 0 && aantalAutos[3] == 0) {
			cout << "  Koffie drinken" << endl;
			Thread::msleep(200);
		} else {
			//cout << "  Draaien" << endl;


			//Draai een kwartslag
			kijkrichting++;
			aantaldoorgelatenAutos = 0;

			//Als de agent drijgt verder te kijken dan 4/4 dan begint ie weer op op 1/4
			if (kijkrichting > 3) {
				kijkrichting = 0;
			}
			std::cout << "Richting van de agent:  "
					<< autosUitRichting[kijkrichting].getName() << endl;

		}
		kruising.unlock();


	}

}

